package com.study.mr.partitioner;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * 以WordCount为例：
 * 自定义Reducer类，继承hadoop提供的Reducer，并且根据具体业务指定输入数据和输出数据类型
 *
 * 输入数据类型：
 * KEYIN    Map端输出的key类型
 * VALUEIN  Map端输出的value类型
 *
 * 输出数据类型：
 * KEYOUT   输出数据key的类型    就是一个单词（Text）
 * VALUEOUT 输出数据value的类型  单词出现的总数量（IntWritable）
 *
 */
public class WordCountReducer extends Reducer<Text,IntWritable,Text,IntWritable>{

    private Text outk=new Text();
    private IntWritable outv=new IntWritable();

    /**
     * Reducer阶段核心业务处理方法,一组相同的key和values会调用一次reduce方法
     * @param key
     * @param values
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //1，遍历values
        int total=0;
        for (IntWritable value : values) {
            total+=value.get();
        }

        //2.封装key和value
        outk.set(key);
        outv.set(total);
        context.write(outk,outv);
    }
}
